/*******************************************************************************

      ---------========= DSx86 Configuration Editor =========---------
                               by RyouArashi
                        http://ryouarashi.blogspot.com


              ---------========= License Agreement =========---------

Copyright 2010 RyouArashi. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

   1. Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY RyouArashi ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL RyouArashi OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*******************************************************************************/

/*******************************************************************************
 * Editor Functions
 ******************************************************************************/

#ifndef _EDITOR_H_
#define _EDITOR_H_

#include "PROFILES.H"

/* Editor Frame */
extern const char EditorFrame[];
extern const char EditorKeysFrame[];
extern const char EditorTPMFrame[];

enum
{
  SUB_KEYS, SUB_TPM,
  NUM_SUB
};

/* Screen Backup Buffer */
struct ScreenBackupBuf
{
  unsigned CursorX;
  unsigned CursorY;
  void *   ScreenBlock;
};

/* MessageBox Entry */
struct MessageBoxEntry
{
  unsigned Len;
  char *   Text;
};

/* MessageBox Record */
struct MessageBox
{
  char *   Message;
  unsigned Len;
  unsigned EntryCount;

  struct MessageBoxEntry * Entries;
};

/* MessageBox Types */
extern const struct MessageBox MsgBoxExit;

/* Show Editor Frame */
void DisplayEditorFrame(unsigned SubFrame);
void DisplayEditorSubFrame(unsigned SubFrame);

/* MessageBoxes/InputBoxes */
int MessageBox(const struct MessageBox * MsgBox);
int MessageBoxOK(char * Text);
int MessageBoxYesNo(char * Text);
unsigned InputBox(char * Text, char * Buffer, unsigned MaxLen);

/* Backup/Restore Screen */
unsigned BackupScreen(struct ScreenBackupBuf * Buffer);
unsigned RestoreScreen(struct ScreenBackupBuf * Buffer);

/* Display the Profile List */
void DisplayProfileList(struct ProfileList * List, int * Base, int * Index);

/* Show Profile */
void ShowProfile(struct Profile * P, int Selected, int Mode);

/* Edit Profile */
unsigned EditProfile(struct Profile * P, struct ProfileList * List);

/* Run the Editor */
unsigned RunEditor(struct ProfileList * List);

/* End of File ****************************************************************/
#endif